package com.kakarote.bi.common.utils;

import com.kakarote.bi.entity.VO.BiRankCountVO;
import com.kakarote.bi.entity.VO.BiRankMoneyVO;
import com.kakarote.core.common.enums.DateFilterEnum;
import com.kakarote.core.feign.admin.entity.SimpleUser;
import com.kakarote.core.utils.UserCacheUtil;

import java.util.List;

public class BiDataFormatUtil {

    /**
     * 日期展示数据的格式化
     * 如果entity还继承了@BaseUserSetting，也会一起设置用户名
     *
     * @param list           list
     * @param dateFilterEnum 日期筛选类型
     */
    public static void dateFormat(List<?> list, DateFilterEnum dateFilterEnum) {
        for (Object o : list) {
            if (o instanceof BaseUserSetting) {
                ((BaseUserSetting) o).setRealname(UserCacheUtil.getUserName(((BaseUserSetting) o).getUserId()));
            }
        }
    }

    /**
     * 排行榜需要的统一信息格式化
     *
     * @param rankMoneyVOS data
     */
    public static void rankUserMoneySetting(List<BiRankMoneyVO> rankMoneyVOS) {
        int i = 0;
        for (BiRankMoneyVO moneyVO : rankMoneyVOS) {
            SimpleUser simpleUser = UserCacheUtil.getSimpleUser(moneyVO.getUserId());
            moneyVO.setRealname(simpleUser.getRealname());
            moneyVO.setDeptName(simpleUser.getDeptName());
            moneyVO.setImg(simpleUser.getImg());
            moneyVO.setOrder(++i);
        }
    }

    /**
     * 排行榜需要的统一信息格式化
     *
     * @param rankMoneyVOS data
     */
    public static void rankUserCountSetting(List<BiRankCountVO> rankMoneyVOS) {
        int i = 0;
        for (BiRankCountVO moneyVO : rankMoneyVOS) {
            SimpleUser simpleUser = UserCacheUtil.getSimpleUser(moneyVO.getUserId());
            moneyVO.setRealname(simpleUser.getRealname());
            moneyVO.setDeptName(simpleUser.getDeptName());
            moneyVO.setImg(simpleUser.getImg());
            moneyVO.setOrder(++i);
        }
    }

    /**
     * 统一的日期展示类型设置
     */
    public interface BaseDateTypeSetting {

        /**
         * 设置时间格式化类型
         *
         * @param type type
         */
        void setType(String type);

        /**
         * 获取时间格式化Type
         *
         * @return type
         */
        String getType();
    }


    /**
     * 统一的员工信息设置
     */
    public interface BaseUserSetting {

        /**
         * 获取用户ID
         *
         * @return userId
         */
        Long getUserId();

        /**
         * 获取用户昵称
         *
         * @return 用户昵称
         */
        String getRealname();

        /**
         * 设置用户昵称
         *
         * @param realname 用户昵称
         */
        void setRealname(String realname);
    }
}
